Android设备指纹
The following article is from 编码安全 Author 编码安全
背景
在移动端安全对抗的过程中,都无法避免跟设备指纹这方面进行打交道。目前大部分的一些核心业务都接入设备指纹的sdk,设备指纹主要更多应用在防登录作弊场景、防支付作弊场景、用户画像分析、防撸羊毛、广告精准营销等。目前提供设备指纹的厂家有很多如:数美设备指纹、网易设备指纹、腾讯的设备指纹、阿里的设备指纹等等。
设备指纹主要是基于用户的设备信息进行做收集,大数据的分析,从而进行做安全风控的防护。
下面针对设备指纹的生成方式,设备指纹的采集点维度,设备指纹的应用梳理解析。
设备指纹采集点
目前在移动端下采集用户信息都必须符合安全合规的要求,所以想知道设备指纹中从用户手机上采集了用户什么信息都会在隐私政策中去体现出来。
设备指纹的最重要也是最基础的就是采集用户设备中的硬件本身信息和软件设置相关的信息。
设备指纹中在处理用户这么多采集要素,要保证生成的设备指纹信息具有唯一性、准确性、稳定性等就需要强大的算法层处理。根据不同采集要素的权重,确保设备采集信息发生变化或波动时,仍可以生成稳定的唯一DeviceID码。
下图是一些设备指纹采集用户信息的相关参数和解析。
设备指纹生成方式
1.主动式采集并上传设备多维度的信息,比如UA、MAC地址、设备IMEI号、广告追踪ID等与客户端上生成唯一的设备ID。
局限性有:不同生态的平台对用户隐私数据开放权限不同,很难统一生成唯一识别码,且无法实现Web和App跨域统一。主动式设备指纹另一个局限性,由于强依赖客户端代码,这种方式生成的指纹在反欺诈的场景中对抗性较弱。
2. 被动式采集设备指纹技术在终端设备与服务器通信的过程中,从数据报文的OSI七层协议中,提取出该终端设备的OS、协议栈和网络状态相关的特征集,并结合机器学习算法以标识和跟踪具体的终端设备。
3.混合式采集,它就是既有客户端主动采集部分,又有通过服务端算法生成部分。通过植入SDK和JS,埋点在固定的业务场景,被动触发时的主动去采集要素,并与服务端交互,通过算法混淆加密后,在服务端生成唯一的设备指纹识ID,同时写入唯一ID存于app应用缓存或浏览器cookie中。一定时间内,用户再次使用对应业务埋点页面时,无需大量重新上传采集要素,只需比对要素变化比例,通过加权比对,计算得出置信度数值,并通过阈值判断是否重新生成设备指纹码。正常用户在使用时理论上是无感知且很少会主动篡改设备指纹唯一ID。
设备指纹的一个完成流程图
总结
设备指纹从用户体验来说,要保证用户是无感知的、免安装,动态更新,并且能做到防篡改的情况。
采集的设备信息准确率要高,不同设备生成的设备指纹保证不会重复,确保设备指纹生成的唯一性。个人的常用设备总是有限的,一段时间内一般不会超过5个以上。
采集的设备信息稳定性要高,不会因设备系统升级或少量参数变更,设备指纹码不会发生变更。
设备覆盖率要足够广,确保各种设备载体都能生成设备指纹唯一码。
采集的设备信息安全性要高,它不会在网络传输中因篡改(xposed框架)、注入导致生成设备指纹不准确。
参考借鉴
https://zhuanlan.zhihu.com/p/68852244
【精彩阅读】
Android逆向之Magisk+Edxposed刷入教程(内附资源)
bundletool工具使用(Android aab包安装)
Google Play上架App之aab转apk和apk转aab的使用方法
欢迎关注、点赞、转发、分享